package com.ruoyi.delivery.mapper;

import com.ruoyi.delivery.domain.DelOutBoundOrder;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 运输订单 数据层
 *
 * @author hu
 */
public interface DelOutBoundOrderMapper {
    /**
     * 根据条件筛选出库订单（支持分页）
     * @param outId 出库订单ID（支持模糊搜索）
     * @param warehouseId 仓库编号（支持模糊搜索）
     * @param destination 目的地（支持模糊搜索）
     * @param outcomeDateStart 出库日期范围的起始日期
     * @param outcomeDateEnd 出库日期范围的结束日期
     * @param expectedDeliveryTimeStart 预计到达日期范围的起始日期
     * @param expectedDeliveryTimeEnd 预计到达日期范围的结束日期
     * @param state 状态
     * @param evidenceRecordId 订单号（支持模糊搜索）
     * @param offset 分页偏移量
     * @param pageSize 每页记录数
     * @return 满足条件的出库订单列表
     */
    List<DelOutBoundOrder> filterOutBoundOrders(
            @Param("outId") String outId,
            @Param("warehouseId") String warehouseId,
            @Param("destination") String destination,
            @Param("outcomeDateStart") String outcomeDateStart,
            @Param("outcomeDateEnd") String outcomeDateEnd,
            @Param("expectedDeliveryTimeStart") String expectedDeliveryTimeStart,
            @Param("expectedDeliveryTimeEnd") String expectedDeliveryTimeEnd,
            @Param("state") String state,
            @Param("evidenceRecordId") String evidenceRecordId,
            @Param("offset") int offset,
            @Param("pageSize") int pageSize
    );
    /**
     * 统计运输订单的数量
     * @return 运输订单的总数
     */
    int countOperatorTransportOrders();

    /**
     * 插入出库订单
     * @param order 出库订单对象
     * @return 受影响的行数
     */
    int insertOutBoundOrder(DelOutBoundOrder order);

    /**
     * 删除出库订单
     * @param outId 出库订单ID
     * @return 受影响的行数
     */
    int deleteOutBoundOrder(@Param("outId") String outId);

    /**
     * 修改出库订单
     * @param order 出库订单对象
     * @return 受影响的行数
     */
    int updateOutBoundOrder(DelOutBoundOrder order);

    /**
     * 根据订单号查询仓库编号
     * @param evidenceRecordId 订单号
     * @return warehouseId 仓库编号
     */
    String getWarehouseIdByEvidenceRecordId(@Param("evidenceRecordId") String evidenceRecordId);
}